<?php

defined('_JEXEC') or die;

class AnodosTableUpdater extends JTable {

	public function __construct(&$db) {
		parent::__construct('#__anodos_updater', 'id', $db);
	}

	public function bind($array, $ignore = '') {

		if (isset($array['params']) && is_array($array['params'])) {
			$registry = new JRegistry();
			$registry->loadArray($array['params']);
			$array['params'] = (string) $registry;
		}

		if (isset($array['metadata']) && is_array($array['metadata'])) {
			$registry = new JRegistry();
			$registry->loadArray($array['metadata']);
			$array['metadata'] = (string) $registry;
		}

		if (isset($array['rules']) && is_array($array['rules'])) {
			$rules = new JRules($array['rules']);
			$this->setRules($rules);
		}

		return parent::bind($array, $ignore);
	}

	public function check() {

		//If there is an ordering column and this is a new row then get the next ordering value
		if (property_exists($this, 'ordering') && $this->id == 0) {
			$this->ordering = self::getNextOrder();
		}

		return parent::check();
	}

	public function publish($pks = null, $state = 1, $userId = 0) {

		// Initialise variables
		$k = $this->_tbl_key;

		// Sanitize input
		JArrayHelper::toInteger($pks);
		$userId = (int) $userId;
		$state = (int) $state;

		// If there are no primary keys set check to see if the instance key is set
		if (empty($pks)) {
			if ($this->$k) {
				$pks = array($this->$k);
			}
			// Nothing to set publishing state on, return false
			else {
				$this->setError(JText::_('JLIB_DATABASE_ERROR_NO_ROWS_SELECTED'));
				return false;
			}
		}

		// Build the WHERE clause for the primary keys
		$where = $k . '=' . implode(' OR ' . $k . '=', $pks);

		// Determine if there is checkin support for the table
		if (!property_exists($this, 'checked_out') || !property_exists($this, 'checked_out_time')) {
			$checkin = '';
		} else {
			$checkin = ' AND (checked_out = 0 OR checked_out = ' . (int) $userId . ')';
		}

		// Update the publishing state for rows with the given primary keys
		$this->_db->setQuery(
			'UPDATE `' . $this->_tbl . '`' .
			' SET `state` = ' . (int) $state .
			' WHERE (' . $where . ')' .
			$checkin
		);
		$this->_db->query();

		// Check for a database error
		if ($this->_db->getErrorNum()) {
			$this->setError($this->_db->getErrorMsg());
			return false;
		}

		// If checkin is supported and all rows were adjusted, check them in
		if ($checkin && (count($pks) == $this->_db->getAffectedRows())) {
			// Checkin each row
			foreach ($pks as $pk) {
				$this->checkin($pk);
			}
		}

		// If the JTable instance value is in the list of primary keys that were set, set the instance
		if (in_array($this->$k, $pks)) {
			$this->state = $state;
		}

		$this->setError('');
		return true;
	}

	protected function _getAssetName() {
		$k = $this->_tbl_key;
		return 'com_anodos.updater.'.(int) $this->$k;
	}

	protected function _getAssetTitle() {
		return $this->name;
	}

	protected function _getAssetParentId() {

		$assetParent = JTable::getInstance('Asset');

		$assetParentId = $assetParent->getRootId();

		if (($this->category_id) && !empty($this->category_id)) {
			$assetParent->loadByName('com_anodos.updater.category.' . (int) $this->category_id);
		} else {
			$assetParent->loadByName('com_anodos');
		}

		if ($assetParent->id) {
			$assetParentId=$assetParent->id;
		}

	return $assetParentId;
	}
}
